Skip to content
0

Harness Engineering 深度笔记

我来为您整理这篇关于 Harness Engineering 的详尽笔记。


Harness Engineering 深度笔记

原文:一文搞懂 Harness Engineering:六层架构、上下文管理与一线团队实战


一、核心公式:Agent = Model + Harness

组件定义类比
Model(模型)能力的来源,文本进文本出的函数CPU
Harness模型之外的一切——系统提示词、工具调用、文件系统、沙箱环境、编排逻辑、约束机制、反馈回路操作系统

关键洞察:你不是模型,那你就是 Harness。模型决定了系统的上限,Harness 决定了系统的底线


二、三层嵌套关系:Prompt ⊂ Context ⊂ Harness

层级核心问题关注点典型工作
Prompt Engineering表达——怎么写好指令塑造局部概率空间,让模型听懂意图系统提示词设计、Few-shot、思维链引导
Context Engineering信息——给 Agent 看什么确保模型在合适的时机拿到正确且必要的事实信息上下文管理、RAG、记忆注入、Token 优化
Harness Engineering执行——整个系统怎么防崩、怎么量化、怎么持续运转长链路任务中的持续正确、偏差纠正、故障恢复文件系统、沙箱、约束执行、熵管理、反馈回路

适用场景递进

  • 简单任务 → Prompt Engineering 最重要
  • 依赖外部知识的任务 → Context Engineering 关键
  • 长链路、可执行、低容错的商业场景 → Harness Engineering 决定成败

三、Harness 核心组件(模型做不到 → Harness 来补)

模型做不到Harness 怎么补核心组件
记住多轮对话历史维护对话历史,每次请求时拼进上下文记忆系统
执行代码、跑命令提供 Bash + 代码执行环境通用执行环境
获取实时信息Web Search、MCP 工具外部知识获取
操作文件和环境文件系统抽象 + Git 版本控制文件系统
知道自己做对了没有沙箱环境 + 测试工具 + 浏览器自动化验证闭环
在长任务中保持连贯上下文压缩、记忆文件、进度追踪上下文管理

四、Harness 六层架构(核心框架)

层级名称解决什么问题关键设计类比(新手员工工作环境)
L1信息边界层Agent 该知道什么、不该知道什么定义角色与目标,裁剪无关信息,结构化组织任务状态岗位说明书
L2工具系统层Agent 怎么跟外部世界交互工具的选拔、调用时机、结果的提炼与反馈办公工具
L3执行编排层多步骤任务怎么串起来让模型走完"理解目标→判断信息→分析→生成→检查"的完整轨道标准操作流程
L4记忆与状态层长任务中间结果怎么管独立管理当前任务状态、中间产物和长期记忆项目管理系统和笔记本
L5评估与观测层Agent 怎么知道自己做对了没有建立独立于生成过程的验证机制,让 Agent 具备"自知之明"质检流程
L6约束、校验与恢复层出错了怎么办预设规则拦截错误,失败时提供重试或回滚机制红线规则和应急预案

启动建议:不要试图一开始就搭齐六层。从 L1(信息边界)L6(约束与恢复) 入手,投入产出比最高。


五、为什么瓶颈不在模型而在 Harness?

关键实验证据

来源实验结果
Can.ac同一模型,只换文件编辑接口的调用方式编码基准分数从 6.7% → 68.3%10倍提升
LangChain优化 Agent 运行环境(文档组织、验证回路、追踪系统),模型不变Terminal Bench 2.0 排名从全球第30 → 第5,得分 52.8% → 66.5%

重要发现:Model-Harness 耦合问题

"The best harness for your task is not necessarily the one a model was post-trained with."

当前 Agent 产品(Claude Code、Codex)是模型和 Harness 一起训练的,导致过拟合——换了工具逻辑后模型表现会变差。Opus 在 Claude Code 的 Harness 下得分,远低于在其他 Harness 中的得分。


六、上下文管理:40% 阈值法则

区间占比表现
Smart Zone0 ~ 40%推理聚焦、工具调用准确、代码质量高
Dumb Zone超过 ~40%幻觉增多、兜圈子、格式混乱、低质量代码

工程实践:在生产环境中监控上下文利用率是第一优先级。建议设置 40% 阈值告警,超过即触发上下文压缩或任务交接。

Anthropic 的解决方案:Context Resets(上下文重置)

不是压缩,而是重启

  1. 上下文接近饱和时,结构化提取当前任务状态、已完成工作、待办事项
  2. 启动全新的"干净" Agent
  3. 新 Agent 从干净状态继续工作

类比:程序内存泄漏时的解法——不去手动释放每个内存块,而是重启进程,从检查点恢复状态


七、从零搭建 Harness:P0/P1/P2 行动清单

P0:立即可以做(投入产出比最高)

行动为什么参考实践
创建 AGENTS.md 并持续维护Agent 每次启动自动加载,犯错就更新,形成反馈循环Hashimoto:每一行对应一个历史失败案例
构建自定义 Linter + 修复指令错误消息里直接告诉 Agent 怎么改,纠错的同时在"教"OpenAI 的 Linter 报错自带修复方法
把团队知识放进仓库写在 Slack/Wiki/Docs 里的知识对 Agent 等于不存在OpenAI 以仓库为唯一事实源

常见误区AGENTS.md 不要当"超级 System Prompt"来写。正确做法——只当目录用(约 100 行),详细规则放在子文档中按需加载(渐进式披露)。

P1:P0 之后考虑

行动为什么参考实践
分层管理上下文不要把所有东西塞进一个文件,渐进式披露OpenAI AGENTS.md 当目录用
建立进度文件和功能列表JSON 格式追踪功能状态,Agent 不太会乱改结构化数据Anthropic 初始化 Agent + 编码 Agent 两阶段
给 Agent 端到端验证能力浏览器自动化让 Agent 能像用户一样验证功能Anthropic 用 Playwright/Puppeteer MCP
控制上下文利用率尽量不超过 40%,增量执行Dex Horthy 的 Smart Zone / Dumb Zone

P2:有余力再考虑

行动为什么参考实践
Agent 专业化分工每个 Agent 携带更少无关信息,留在 Smart ZoneCarlini 的去重/优化/文档 Agent
定期垃圾回收确保清理速度跟得上生成速度OpenAI 的后台清理 Agent
可观测性集成把"性能优化"从玄学变成可度量的工作OpenAI 接入 Chrome DevTools

八、Harness 成熟度五阶段

阶段特征工程师角色
Level 0:无 Harness直接给 Agent prompt,无结构化约束手动写代码 + 偶尔使用 AI
Level 1:基础约束AGENTS.md + 基础 Linter + 手动测试主要写代码,AI 辅助
Level 2:反馈回路CI/CD 集成 + 自动化测试 + 进度追踪规划 + 审查为主
Level 3:专业化 Agent多 Agent 分工 + 分层上下文 + 持久化记忆环境设计 + 管理为主
Level 4:自治循环无人值守并行化 + 自动化熵管理 + 自修复架构师 + 质量把关者

九、一线团队实战案例

9.1 OpenAI:3人、5个月、100万行、0手写代码

指标数值
团队规模3 → 7 人
代码规模~100 万行
手写代码0 行(设计约束)
合并 PR 数~1,500 个
效率提升~10 倍

五大方法论

方法论核心做法关键洞察
地图式文档AGENTS.md 仅 ~100 行,当目录用,指向 docs/ 深层文档渐进式披露:给 Agent 一张地图,不是千页手册
机械化约束自定义 Linter + 结构测试,报错自带修复方法"If it cannot be enforced mechanically, agents will deviate."
可观测性给 Agent 看Chrome DevTools Protocol 接入 Agent 运行时Agent 能自己抓 DOM 快照、截图、测量性能
主动对抗熵后台 Agent 定期扫描,自动提交清理 PR熵不会自己消失,清理速度必须跟上生成速度
仓库即唯一事实源所有团队知识版本控制在仓库中Slack 里的知识对 Agent 等于不存在

9.2 Anthropic:GAN 式三智能体架构

Planner(规划者)→ Generator(执行者)⇄ Evaluator(评估者)
角色职责
Planner1-4 句话产品描述 → 完整产品规格,"范围上要大胆"
Generator按功能逐个 Sprint 执行,每个有明确完成标准
Evaluator用 Playwright MCP 实际点击运行中的应用,多维度打分

解决两个核心问题

问题表现解法
上下文焦虑Sonnet 4.5 上下文快满时草草收尾Context resets + 结构化交接(非压缩)
自我评价偏差Agent 自信满满,实际质量一般生成和评估交给两个独立 Agent

关键发现:模型从 Sonnet 4.5 换成 Opus 4.6 后,Sprint 机制可完全移除,Evaluator 从每轮检查 → 最终只检查一次。

Anthropic 精辟总结:"Every component in a harness encodes an assumption about what the model can't do on its own, and those assumptions are worth stress testing."

模型越强,Harness 设计空间转移而非缩小——需要定期简化 Harness,移除已冗余的保护机制。


9.3 Stripe:每周 1300+ PR,全程无人值守

组件作用关键设计
Devbox开发环境AWS EC2 预装源码和服务,预热池分配,启动 ~10 秒,"牲口不是宠物"
编排状态机流程控制混合确定性节点(lint、push)和 Agent 节点(实现功能、修 CI)
Toolshed MCP工具服务集中式 MCP 服务,近 500 个工具,每个 Minion 获筛选子集
反馈回路质量保障Pre-push hook 秒级修 lint;推送后最多 2 轮 CI(300 万+ 测试)

核心理念:"What's good for humans is good for agents."——为人类工程师投资的 Devbox、工具链和开发者体验,在 Agent 上直接产生回报。


9.4 Mitchell Hashimoto:单 Agent 深度参与模式

步骤名称核心做法
1放弃聊天模式让 Agent 在能读文件、跑程序、发 HTTP 请求的环境里直接干活
2复现自己的工作每件事做两次——一次自己做,一次让 Agent 做("痛苦至极")
3下班前启动 Agent每天最后 30 分钟布置任务:深度调研、模糊探索、Issue 分拣
4外包确定性任务挑出 Agent 几乎一定能做好的任务后台跑着,关掉桌面通知
5工程化 Harness每当 Agent 犯错,就工程化一个解决方案让它永远不再犯
6始终有 Agent 在跑目标 10-20% 工作时间有后台 Agent 运行

AGENTS.md 的正确用法:Ghostty 项目的 AGENTS.md每一行都对应一个过去的 Agent 失败案例——不是静态文档,而是持续积累的防错系统


9.5 Birgitta Böckeler:系统化梳理与前瞻判断

Harness 组件三类归一

归类关注点典型实践
Context Engineering管理 Agent 看到什么、什么时候看到巨大 AGENTS.md → 入口文件 + 分层文档
Architectural Constraints确保 Agent 不跑偏自定义 Linter、结构测试、LLM Agent 充当约束
Garbage Collection对抗熵积累定期运行清理 Agent 扫描不一致和违规

三个前瞻性判断

  1. Harness 将成为新的服务模板——像今天从服务模板实例化新服务一样
  2. 棕地项目改造是最大挑战——所有公开案例都是绿地项目;提出 "Ambient Affordances" 概念:环境本身的结构特性(类型系统、模块边界、框架抽象)决定 Harness 能做多好
  3. 功能验证体系几乎缺席——"用 AI 生成的测试来验证 AI 生成的代码,本质上是用同一双眼睛检查自己的作业"

十、面试高频问题速查

基础概念

问题核心回答
Harness 是什么?模型之外的一切。Agent = Model + Harness。
三层关系?嵌套:Prompt ⊂ Context ⊂ Harness。分别解决表达、信息、执行。
为什么瓶颈不在模型?Can.ac 实验:同一模型换接口格式,6.7% → 68.3%。基础设施质量决定模型能力的实际发挥。

架构设计

问题核心回答
六层架构?L1 信息边界 → L2 工具系统 → L3 执行编排 → L4 记忆与状态 → L5 评估与观测 → L6 约束校验与恢复
上下文管理经验法则?利用率控制在 40% 以内。超过后质量明显下降。策略是压缩或交接,不是继续塞信息。
单 Agent 还是多 Agent?规模决定。小项目单 Agent 够用(Hashimoto),大项目几乎必然需要专业化分工(Carlini 16 个并行 Agent)。

实战方案

问题核心回答
OpenAI 实践核心?五大方法论:地图式文档、机械化约束、可观测性接入、熵管理、仓库即事实源
Anthropic 解决上下文焦虑?Context resets:不压缩,启动全新干净 Agent,结构化交接文档恢复状态。类比重启进程解决内存泄漏。
从零搭 Harness 先做什么?P0:AGENTS.md + 自定义 Linter + 团队知识仓库化

十一、尚未解决的问题(展现思考深度)

问题现状关键概念
棕地项目怎么改造?所有公开案例全是绿地项目,零方法论"Ambient Affordances":环境结构特性决定 Harness 上限
怎么验证 Agent 做对了事?擅长"约束不做错事","验证做对了事"远未解决用 AI 测试验证 AI 代码 = "用同一双眼睛检查自己的作业"
AI 生成代码的长期可维护性?LLM 经常重新实现已有功能,长期效果未知Greg Brockman 提出,至今无人回答
Harness 该做厚还是做薄?Manus 五次重写越做越简单 vs OpenAI 五个月越做越复杂场景决定:通用产品追求最小化,特定产品可高度定制;模型变强后应定期简化
单 Agent 还是多 Agent?Hashimoto 坚持单 Agent vs Carlini 用 16 个并行 Agent规模决定

十二、一句话总结

承认模型有边界,然后把边界之外的需求一个个工程化地补上。

与其纠结选哪个模型,不如先把 Harness 搭好。


附录:关键引用原文

来源金句
OpenAI"If it cannot be enforced mechanically, agents will deviate."
Anthropic"Every component in a harness encodes an assumption about what the model can't do on its own, and those assumptions are worth stress testing."
Anthropic"The space of interesting harness combinations doesn't shrink as models improve. Instead, it moves."
Stripe"What's good for humans is good for agents."
Carlini"I must constantly remind myself: I am writing this test framework for Claude, not for myself."

笔记整理完成。核心框架:六层架构 + 40% 上下文阈值 + P0/P1/P2 行动清单 + 一线团队五大案例。

最近更新